/**
 * Copyright 2012 ibiblio
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.ibiblio.terasaur.bt

import org.ibiblio.terasaur.item.Item
import org.joda.time.DateTime
import org.joda.time.contrib.hibernate.PersistentDateTime

class Torrent {
    String infoHash // info hash
    String name
    Long size // content size
    String filename // torrent file name
    Long filesize // torrent file size
    DateTime published
    // autoTimestamp attributes
    DateTime dateCreated
    DateTime lastUpdated

    Stats stats
    List<Peer> peers

    static constraints = {
        infoHash(blank: false, unique: true, size: 40..40)
        name(blank: false)
        size(nullable: false)
        filename(blank: false)
        filesize(nullable: false)
        published(nullable: false)
        item(nullable: false)
        stats(nullable: true)
        peers(nullable: true)
    }

    static belongsTo = [item: Item]
    static hasMany = [seedbanks: SeedbankTorrent]
    static hasOne = [stats: Stats]

    //static transients = ['stats', 'peers']
    static transients = ['peers']

    static mapping = {
        table 'ts_torrent'
        id generator: 'assigned', type: 'string', column: 'info_hash', name: 'infoHash', property: 'infoHash'
        item joinTable: false
        cache true
        stats lazy: true
        published type: PersistentDateTime
        dateCreated type: PersistentDateTime
        lastUpdated type: PersistentDateTime
    }

    public getPeers() {
        if (!peers) {
            peers = _getPeers()
        }
        return peers
    }

    private _getPeers() {
        return null
    }
}
